package Jsoup;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.net.URL;

/**
 * @author 李某
 * * @date 2021/10/27
 * *物有本末，事有终始。知其先后者，则近道矣！
 * *荷花开满池塘的前一天还是半塘荷花半塘云。
 */
public class TestJsoup {}


 class Test9 {
    // 运行这段代码就可以将一段 Html 中的特定文件取出
    public static void main(String[] args) throws Exception {
        String html = "<html><body><p>Hello HTML</p></body></html>";

        // 把文本解析成Document对象，document 对象就代表了整个xml文档
        Document doc = Jsoup.parse(html);

        // 获取所有的 p 元素
        Elements as= doc.getElementsByTag("p");
        // 遍历所有 p 元素，但是这里只有一个
        for (Element e : as) {
            System.out.println(e.text());
        }

    }
}

class Test1 {

    public static void main(String[] args) throws Exception {
        String html1 = "<html><body><p>Hello HTML</p></body></html>";
        Document doc1 = Jsoup.parse(html1);
        System.out.println("基于字符串方式得到的 Document:\r\n" + doc1);

//        File f = new File("a.html");
//        if(f.exists()) {
//            Document doc2 = JsouPtEST.parse(f,"utf-8");
//            System.out.println("基于文件方式得到的 Document:\r\n"+ doc2);
//        }

        String url = "http://www.baidu.com";
        Document doc3 = Jsoup.parse(new URL(url), 5000); //超过5秒就报错
        System.out.println("基于URL方式得到的 Document:\r\n" + doc3);


        Elements as = doc3.getElementsByTag("p");
        // 遍历所有 p 元素，但是这里只有一个
        for (Element e : as) {
            System.out.println(e.text());
        }
    }
}

class Test3 {

    static String url = "http://www.baidu.com";
    static Document doc; //超过5秒就报错

    static {
        try {
            doc = Jsoup.parse(new URL(url), 5000);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws Exception {

        //通过id获取
        Element e = doc.getElementById("productName");
        System.out.println(e);

        //通过标签获取
        Elements es;
        es = doc.getElementsByTag("a");
        show(es);

        //通过类名称获取
        es = doc.getElementsByClass("RightBox");
        show(es);

        //通过属性获取
        es = doc.getElementsByAttribute("name");
        show(es);


        //像 jquery 那样的选择器语法
        show("选择所有的超链", "a");
        show("根据id进行选择", "#logocover");
        show("根据class进行选择", ".clearfloat");
        show("根据属性进行选择", "[href]");
        show("有属性以tar开头", "[^tar]");
        show("根据属性值选择", "[type='application/javascript']");
        show("属性值以什么开头", "[href^='http://www.oracle.com']");
        show("属性值以什么结尾", "[href$='index.html']");
        show("属性值包含什么", "[href*='download']");

    }

    private static void show(Elements es) {
        for (Element e : es) {
            System.out.println(e);
        }

    }

    private static void show(String text, String selector) {
        show(text,selector,3);
    }

    private static void show(String text, String selector, int limit) {
        Elements es = doc.select(selector);
        if(es.size()>1)
            System.out.println(String.format("%s - 使用的选择器是: \"%s\" \t (最多显示 %d 条 )", text,selector,limit));
        else
            System.out.println(String.format("%s - 使用的选择器是: \"%s\"", text,selector));
        int i =0;
        for (Element e : es) {
            if(i++<limit)
                System.out.println(e);
        }
        System.out.println();
    }
}


